--- title: "getline" created: 2025-11-28 tags: - 算法 --- # getline `getline` 是一个在 C++ 中用于从输入流中读取一行字符串的函数。 它非常适合用于读取包含空格的字符串输入,因为它会读取输入直到遇到换行符为止,而不是像标准输入运算符 `>>` 那样在遇到空格时停止。 `getline` 定义在 `` 头文件中。 ### 基本用法 ```cpp getline(std::istream& is, std::string& str, char delim = '\n'); ``` - `is`:输入流,通常是 `std::cin`,但也可以是文件流或其他输入流。 - `str`:用于存储读取行的字符串变量。 - `delim`:(可选)分隔符,默认为换行符 `'\n'`。读取会在遇到此字符时停止,但不包括分隔符本身。 ### 示例 #### 读取一行输入 ```typescript #include #include int main() { std::string line; std::cout << "Please enter a line of text:\n"; std::getline(std::cin, line); std::cout << "You entered: " << line << std::endl; return 0; } ``` #### 使用自定义分隔符读取 ```typescript #include #include int main() { std::string part; std::cout << "Enter a sentence with commas:\n"; // 假设输入是: This is,a test,string. while (std::getline(std::cin, part, ',')) { std::cout << "Segment: " << part << std::endl; // 第一次循环输出: Segment: This is // 第二次循环输出: Segment: a test // 第三次循环输出: Segment: string. } return 0; } ``` ### 注意事项 - 在使用 `std::getline` 读取数据之前,如果已经使用过 `std::cin` 来读取变量,可能需要先清除输入缓冲区中的残留换行符。可以使用 `std::cin.ignore(std::numeric_limits::max(), '\n')` 来实现这一点。 - `std::getline` 会从给定的输入流中抽取并丢弃分隔符(默认为换行符),但分隔符不会被添加到输出字符串中。 - 如果输入流遇到错误(如文件结束EOF),`std::getline` 会设置输入流的状态标志,可以通过检查 `std::cin.fail()` 来判断是否读取成功。 `std::getline` 是处理文本输入中的行读取的首选方式,特别是当行中包含空格时。它提供了一种简单且灵活的方法来从各种输入流中读取和处理字符串数据。 --- ⬅️ [[ascii基础 getline|ascii基础 getline]] 🏠 [[00-刷题理模型]] ➡️ [[c风格字符串与string的相互转换|c风格字符串与string的相互转换]]